package com.zenithmind.chat.service.impl;

import com.zenithmind.chat.pojo.dto.AiChatDTO;
import com.zenithmind.chat.pojo.dto.AiChatMessageDTO;
import com.zenithmind.chat.pojo.entity.AiChat;
import com.zenithmind.chat.service.AiChatValidationService;
import com.zenithmind.chat.enums.ModelType;
import com.zenithmind.chat.exception.AiChatException;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import org.springframework.util.StringUtils;

/**
 * AI对话验证服务实现类
 * 遵循单一职责原则，专门负责数据验证逻辑
 */
@Slf4j
@Service
public class AiChatValidationServiceImpl implements AiChatValidationService {
    
    @Override
    public ValidationResult validateChatCreation(AiChatDTO chatDTO) {
        if (chatDTO == null) {
            return ValidationResult.failure("对话数据不能为空");
        }
        
        if (!StringUtils.hasText(chatDTO.getTitle())) {
            return ValidationResult.failure("对话标题不能为空");
        }
        
        if (chatDTO.getTitle().length() > 100) {
            return ValidationResult.failure("对话标题长度不能超过100个字符");
        }
        
        if (chatDTO.getModelType() == null) {
            return ValidationResult.failure("模型类型不能为空");
        }
        
        try {
            ModelType.fromCode(chatDTO.getModelType());
        } catch (IllegalArgumentException e) {
            return ValidationResult.failure(400, "不支持的模型类型: " + chatDTO.getModelType());
        }
        
        if (!StringUtils.hasText(chatDTO.getModelName())) {
            return ValidationResult.failure("模型名称不能为空");
        }
        
        if (chatDTO.getTemperature() != null && 
            (chatDTO.getTemperature() < 0.0f || chatDTO.getTemperature() > 2.0f)) {
            return ValidationResult.failure("温度值必须在0.0-2.0之间");
        }
        
        if (chatDTO.getMaxTokens() != null && chatDTO.getMaxTokens() <= 0) {
            return ValidationResult.failure("最大token数必须大于0");
        }
        
        return ValidationResult.success();
    }
    
    @Override
    public ValidationResult validateChatUpdate(AiChat chat, AiChatDTO chatDTO) {
        if (chat == null) {
            return ValidationResult.failure("对话不存在");
        }
        
        if (chatDTO == null) {
            return ValidationResult.failure("更新数据不能为空");
        }
        
        // 验证标题
        if (StringUtils.hasText(chatDTO.getTitle()) && chatDTO.getTitle().length() > 100) {
            return ValidationResult.failure("对话标题长度不能超过100个字符");
        }
        
        // 验证模型类型
        if (chatDTO.getModelType() != null) {
            try {
                ModelType.fromCode(chatDTO.getModelType());
            } catch (IllegalArgumentException e) {
                return ValidationResult.failure(400, "不支持的模型类型: " + chatDTO.getModelType());
            }
        }
        
        // 验证温度值
        if (chatDTO.getTemperature() != null && 
            (chatDTO.getTemperature() < 0.0f || chatDTO.getTemperature() > 2.0f)) {
            return ValidationResult.failure("温度值必须在0.0-2.0之间");
        }
        
        // 验证最大token数
        if (chatDTO.getMaxTokens() != null && chatDTO.getMaxTokens() <= 0) {
            return ValidationResult.failure("最大token数必须大于0");
        }
        
        return ValidationResult.success();
    }
    
    @Override
    public ValidationResult validateMessageSend(AiChatMessageDTO messageDTO) {
        if (messageDTO == null) {
            return ValidationResult.failure("消息数据不能为空");
        }
        
        if (!StringUtils.hasText(messageDTO.getChatId())) {
            return ValidationResult.failure("对话ID不能为空");
        }
        
        if (!StringUtils.hasText(messageDTO.getContent())) {
            return ValidationResult.failure("消息内容不能为空");
        }
        
        if (messageDTO.getContent().length() > 10000) {
            return ValidationResult.failure("消息内容长度不能超过10000个字符");
        }
        
        return ValidationResult.success();
    }
    
    @Override
    public ValidationResult validateChatConfiguration(AiChat chat) {
        if (chat == null) {
            return ValidationResult.failure("对话不能为空");
        }
        
        if (!chat.isValidConfiguration()) {
            return ValidationResult.failure("对话配置无效");
        }
        
        if (!chat.isActive()) {
            return ValidationResult.failure("对话已被禁用");
        }
        
        return ValidationResult.success();
    }
}
